home *** CD-ROM | disk | FTP | other *** search
/ EuroCD 3 / EuroCD 3.iso / Games / Doom / ADoom-0.8 / ADoom_src / c2p_akiko.s < prev    next >
Text File  |  1998-06-24  |  2KB  |  94 lines

  1.         mc68020
  2.         multipass
  3.     if (_eval(DEBUG)&$8000)
  4.         debug    on,lattice4
  5.     endc
  6.  
  7. ;void __asm c2p_akiko (register __a0 UBYTE *chunky_data,
  8. ;                      register __a1 PLANEPTR raster,
  9. ;                      register __a2 UBYTE *dirty_list,
  10. ;                      register __d1 ULONG plsiz,
  11. ;                      register __a5 UBYTE *akiko_address);
  12.  
  13. ; a0 -> width*height chunky pixels in fastmem
  14. ; a1 -> contiguous bitplanes in chipmem
  15. ; a2 -> dirty list (1-byte flag for whether each 32 pixel "unit" needs updating)
  16. ; d1 = width*height/8   (width*height must be a multiple of 32)
  17.  
  18.     ifeq    depth-8
  19.         xdef    _c2p_8_akiko
  20. _c2p_8_akiko:
  21.     else
  22.     ifeq    depth-6
  23.         xdef    _c2p_6_akiko
  24. _c2p_6_akiko:
  25.     else
  26.         fail    "unsupported depth!"
  27.     endc
  28.     endc
  29.  
  30.         xref    _GfxBase
  31.  
  32.         movem.l    a2/a3/a6,-(sp)
  33.  
  34.         move.l    d1,d0        ; plsiz
  35.         lsl.l    #3,d0        ; 8*plsiz
  36.         lea    (a0,d0.l),a3    ; a3 -> end of chunky data
  37.         sub.l    d1,d0        ; d0 = 7*plsiz
  38.     ifle depth-6
  39.         sub.l    d1,d0
  40.         sub.l    d1,d0        ; d0 = 5*plsiz if depth=6
  41.     endc
  42.  
  43.         movem.l    d0/d1/a0/a1,-(sp)
  44.         movea.l    (_GfxBase).l,a6
  45.         jsr    (_LVOOwnBlitter,a6) ; gain exclusive use of Akiko
  46.         movem.l    (sp)+,d0/d1/a0/a1
  47.  
  48. loop:        tst.b    (a2)+        ; does next 32 pixel unit need updating?
  49.         bne.b    c2p        ; branch if yes
  50.  
  51.         adda.w    #32,a0        ; skip 32 pixels on input
  52.         addq.l    #4,a1        ; skip 32 pixels on output
  53.  
  54.         cmpa.l    a3,a0
  55.         bne.b    loop
  56.         bra.b    exit        ; exit if no changes
  57.  
  58. c2p:        move.l    (a0)+,(a5)    ; write 32 pixels to akiko
  59.         move.l    (a0)+,(a5)
  60.         move.l    (a0)+,(a5)
  61.         move.l    (a0)+,(a5)
  62.         move.l    (a0)+,(a5)
  63.         move.l    (a0)+,(a5)
  64.         move.l    (a0)+,(a5)
  65.         move.l    (a0)+,(a5)
  66.  
  67.         move.l    (a5),(a1)    ; plane 0
  68.         adda.l    d1,a1
  69.         move.l    (a5),(a1)    ; plane 1
  70.         adda.l    d1,a1
  71.         move.l    (a5),(a1)    ; plane 2
  72.         adda.l    d1,a1
  73.         move.l    (a5),(a1)    ; plane 3
  74.         adda.l    d1,a1
  75.         move.l    (a5),(a1)    ; plane 4
  76.         adda.l    d1,a1
  77.     ifgt depth-6
  78.         move.l    (a5),(a1)    ; plane 5
  79.         adda.l    d1,a1
  80.         move.l    (a5),(a1)    ; plane 6
  81.         adda.l    d1,a1
  82.     endc
  83.         move.l    (a5),(a1)+    ; last plane
  84.  
  85.         suba.l    d0,a1        ; -7*plsiz (or 5*plsiz) (or 3*plsiz)
  86.  
  87.         cmpa.l    a3,a0
  88.         bne.b    loop
  89.  
  90. exit:        jsr    (_LVODisownBlitter,a6) ; free Akiko
  91.  
  92.         movem.l    (sp)+,a2/a3/a6
  93.         rts
  94.